/**
 * ガントチャートページオブジェクト
 */
if( typeof(App.ProjectListGantt) == "undefined" ){

App.ProjectListGantt = function(){
    // スーパークラスコンストラクタ呼び出し
    App.ProjectListGantt.superclass.constructor.call(this);
};

var _list_gantt = {
    /*
     * properties
     */
    

    /*
     * Event handlers
     */

    /**
     * onDocLoaded
     * ページ初期化
     */
    onDocLoaded : function(eventObject, target)
    {
        // スーパークラスの処理を実行
        App.ProjectListGantt.superclass.onDocLoaded.call(this, eventObject, target);

        this.fncInitializeListGanttGrid();
        this.fncRender();// ページレンダリング
        this.fncSetEvent();// 各イベント設定
        this.fncListLoad();// 初期データロード
    },




    /*
     * Functions
     */


    /**
     * fncInitializeListGanttGrid
     */
    fncInitializeListGanttGrid : function()
    {
        initparam = {
            callback : {
                on_dblclick : [ this.onListDblClick.createDelegate(this) ]
            }
        };
        App.listGanttGrid.fncSetInitParameter(initparam);
    },

    /**
     * fncRender
     * ページレンダリング
     */
    fncRender : function()
    {
        App.listGanttGrid.fncRender();
    },

    /**
     * fncSetEvent
     * ページエレメントへのイベントセット
     */
    fncSetEvent : function()
    {
        // タスク追加ボタンクリックイベント設定
        Ext.get('list_gantt_btn_add_task').on('click', this.onNewTaskClick, this, true);
        // イルストーンボタンクリックイベント設定
        Ext.get('list_gantt_btn_add_milestone').on('click', this.onNewMilestoneClick, this, true);
        // イベントボタンクリックイベント設定
        Ext.get('list_gantt_btn_add_event').on('click', this.onNewEventClick, this, true);
		
    },

    /**
     * fncListLoad
     * WBSデータリストを読み込み
     */
    fncListLoad : function()
    {
        // 非同期リクエスト
        var options = {
            url     : url_for('/project/json_list_for_gantt'),
            form    : '',
            success : this.onDataLoadSuccess ,
            failure : this.onDataLoadFail,
            scope   : this,
            method  :'GET'
        };
        Ext.Ajax.request(options);
    },

    /*==================================================
     * 関数名：onDataLoadSuccess
     * 概　要：ガントチャートデータ取得処理成功時コールバック
     * 引　数：response              Object             レスポンスオブジェクト
     *       ：options               Object             リクエストパラメータオプション
     * 戻り値：なし
     ==================================================*/    
    onDataLoadSuccess : function(response, options)
    {
        var responseobj = Ext.util.JSON.decode(response.responseText) ;

        var success = responseobj.success ;
        var message = responseobj.message ;
        if( success ){
            var resultobj = responseobj.result;
            App.listGanttGrid.fncResetGanttList(resultobj.project, resultobj.items);
        } else {
            alert(message);
        }
    },
    
    /*==================================================
     * 関数名：onDataLoadSuccess
     * 概　要：ガントチャートデータ取得処理失敗時コールバック
     * 引　数：response              Object             レスポンスオブジェクト
     *       ：options               Object             リクエストパラメータオプション
     * 戻り値：なし
     ==================================================*/ 		
    onDataLoadFail : function(){
	alert('onDataLoadFail');
    },		

    /*========================================================
     * 関数名：onListDblClick
     * 概　要：WBS一覧クリックイベント。
     * task_kbnに応じたダイアログ表示イベントを呼び出す
     * 引　数：なし
     * 戻り値：なし
     =======================================================*/
    onListDblClick : function()
    {
        // @TODO : アイテムダブルクリック時の処理を記述
        var index    = App.listGanttGrid.fncGetAttribute('selectedIndex');
        var task_kbn = App.listGanttGrid.fncGetRowAttribute(index, 'task_kbn');

        var elm ;
        if( task_kbn != null ){
            switch( eval(task_kbn) ){
                case 1 :
                    this.onEditTaskClick() ;
                    break ;
                case 2 :
                    this.onEditMilestoneClick() ;
                    break ;
                case 3 :
                    this.onEditEventClick() ;
                    break ;
                default :
                    break ;
            }
        }    
    },		
		
    /*========================================================
     * 関数名：onNewClick
     * 概　要：新規リンククリックイベント。
     *         新規プロジェクトページへ遷移する。
     * 引　数：target_url   string      遷移先URL
     * 戻り値：なし
     =======================================================*/
    onNewClick : function(target_url){
    
        var form = document.navigation ;
        
        form.action = target_url ;
        form.submit() ;
    
    },
		
    /*========================================================
     * 関数名：onEditClick
     * 概　要：編集リンククリックイベント。
     *         プロジェクト編集ページへ遷移する。
     * 引　数：target_url   string      遷移先URL
     * 戻り値：なし
     ========================================================*/
    onEditClick : function(target_url){
    
        var form = document.navigation ;
        
        // プルダウン選択中のプロジェクトIDを取得
        var id   =this.fncSelectedProjectIdGet() ;
    
        form.action = target_url + "/" + id ;
        form.submit() ;
    
    },		
		
    /*========================================================
     * 関数名：onDelClick
     * 概　要：削除リンククリックイベント。
     *         プロジェクト削除アクションを実施する
     * 引　数：target_url   string      削除アクションURL
     * 戻り値：なし
     ========================================================*/
    onDelClick : function(target_url){
    
        var form = document.navigation ;
        var id   = this.fncSelectedProjectIdGet() ;
        
        form.action = target_url + "/" + id ;
        form.submit() ;
    
    },		
		
    /*========================================================
     * 関数名：onNewTaskClick
     * 概　要：タスク追加リンククリックイベント
     *         タスク追加ダイアログを表示する。
     * 引　数：なし
     * 戻り値：なし
     ========================================================*/
    onNewTaskClick : function(target_url){
        try{
            // 現在の選択情報をエレメントにセット
            this.fncSetListObj() ;
            
            // パラメータハッシュ生成
            var initparam = {};
        
            // アニメーション元エレメントIDの設定（指定しなくてもよい）
            initparam["base_id"] = "pro_index_list_body" ;
            
            // データパラメータの設定
            var project_id = this.fncSelectedProjectIdGet() ;
            initparam["dataparam"]                = {};
            initparam["dataparam"]["id"]          = "";
            initparam["dataparam"]["project_id"]  = project_id ;
            initparam["dataparam"]["base_id"]     = Ext.get('base_id').value ;
            initparam["dataparam"]["class_word1"] = Ext.get('class_word1').dom.value ;
            initparam["dataparam"]["class_word2"] = Ext.get('class_word2').dom.value ;
            initparam["dataparam"]["class_word3"] = Ext.get('class_word3').dom.value ;

            // コールバックの設定（指定しなくてもよい）
	        initparam["on_save"]  = [this.onTaskSave_callback.createDelegate(this)];
	        initparam["on_close"] = [this.onTaskClose_callback.createDelegate(this)];
    
            // タスク追加ダイアログ表示
            this.dialogs.TaskDlgIndex.fncShowDialog(initparam) ;

/*        
            // コールバックの設定（指定しなくてもよい）
            initparam["callback"] = $H( { on_save : [ this.onTaskSave_callback.createDelegate(this) ],
                                          on_close : [ this.onTaskClose_callback.createDelegate(this) ] } ) ;
    
            // タスク追加ダイアログ表示
            dlgTskEdit.fncShowDialog(initparam) ;
*/
        }
        catch(e){
        }

    },		
		
    /*========================================================
     * 関数名：onEditTaskClick
     * 概　要：タスク編集リンククリックイベント
     *         タスク編集ダイアログを表示する。
     * 引　数：なし
     * 戻り値：なし
     ========================================================*/
    onEditTaskClick : function(target_url){
        try{
            // 現在の選択情報をエレメントにセット
            this.fncSetListObj() ;
            
            // パラメータハッシュ生成
            var initparam = {};
        
            // アニメーション元エレメントIDの設定（指定しなくてもよい）
            initparam["base_id"] = "pro_index_list_body" ;
            
            // データパラメータの設定
            var project_id = this.fncSelectedProjectIdGet() ;
            initparam["dataparam"] = {};
            initparam["dataparam"]["id"]          = Ext.get('base_id').dom.value ;
            initparam["dataparam"]["project_id"]  = project_id ;
            initparam["dataparam"]["base_id"]     = "";
            initparam["dataparam"]["class_word1"] = Ext.get('class_word1').dom.value ;
            initparam["dataparam"]["class_word2"] = Ext.get('class_word2').dom.value ;
            initparam["dataparam"]["class_word3"] = Ext.get('class_word3').dom.value ;

            // コールバックの設定（指定しなくてもよい）
	        initparam["on_save"]    = [this.onTaskSave_callback.createDelegate(this)];
	        initparam["on_destroy"] = [this.onTaskDestroy_callback.createDelegate(this)];
	        initparam["on_close"]   = [this.onTaskClose_callback.createDelegate(this)];

            // タスク追加ダイアログ表示
            this.dialogs.TaskDlgIndex.fncShowDialog(initparam) ;
        }
        catch(e){
        }
    },		

    /*========================================================
     * 関数名：onTaskSave_callback
     * 概　要：タスク保存完了イベント
     *         リストのリロードを実施する。
     * 引　数：なし
     * 戻り値：なし
     ========================================================*/
    onTaskSave_callback : function(){
        // プロジェクトリストをリロード
        this.fncListLoad() ;
    },
    
    /*========================================================
     * 関数名：onTaskDestroy_callback
     * 概　要：タスク削除完了イベント
     *         リストのリロードを実施する。
     * 引　数：なし
     * 戻り値：なし
     ========================================================*/
    onTaskDestroy_callback : function(){
        // プロジェクトリストをリロード
        this.fncListLoad() ;
    },
    
    /*========================================================
     * 関数名：onTaskClose_callback
     * 概　要：タスクダイアログクローズイベント
     *         ダイアログを閉じた場合の後処理を実施する。
     * 引　数：なし
     * 戻り値：なし
     ========================================================*/
    onTaskClose_callback : function(){
    },
    
		
    /*========================================================
     * 関数名：onNewMilestoneClick
     * 概　要：マイルストーン追加リンククリックイベント
     *         マイルストーン追加ダイアログを表示する。
     * 引　数：なし
     * 戻り値：なし
     ========================================================*/
    onNewMilestoneClick : function(){
        try{
            // 現在の選択情報をエレメントにセット
            this.fncSetListObj() ;
            
            // パラメータハッシュ生成
            var initparam = {};
        
            // アニメーション元エレメントIDの設定（指定しなくてもよい）
            initparam["base_id"] = "pro_index_list_body" ;
            
            // データパラメータの設定
            var project_id = this.fncSelectedProjectIdGet() ;
            initparam["dataparam"] = {};
            initparam["dataparam"]["id"]          = "";
            initparam["dataparam"]["project_id"]  = project_id ;
            initparam["dataparam"]["base_id"]     = Ext.get('base_id').dom.value ;
            initparam["dataparam"]["class_word1"] = Ext.get('class_word1').dom.value ;
            initparam["dataparam"]["class_word2"] = Ext.get('class_word2').dom.value ;
            initparam["dataparam"]["class_word3"] = Ext.get('class_word3').dom.value ;

            // コールバックの設定（指定しなくてもよい）
	        initparam["on_save"]  = [this.onMilestoneSave_callback.createDelegate(this)];
	        initparam["on_close"] = [this.onMilestoneClose_callback.createDelegate(this)];

            // タスク追加ダイアログ表示
            this.dialogs.MilestoneDlgIndex.fncShowDialog(initparam) ;

/*        
            // コールバックの設定（指定しなくてもよい）
            initparam["callback"] = $H( { on_save : [this.onMilestoneSave_callback.createDelegate(this)],
                                          on_close : [this.onMilestoneClose_callback.createDelegate(this)] } ) ;
            // タスク追加ダイアログ表示
            dlgMilEdit.fncShowDialog(initparam) ;
*/
        }
        catch(e){
            alert(e.message) ;
        }

    },		
		
    /*========================================================
     * 関数名：onEditMilestoneClick
     * 概　要：マイルストーン編集リンククリックイベント
     *         マイルストーン編集ダイアログを表示する。
     * 引　数：なし
     * 戻り値：なし
     ========================================================*/
    onEditMilestoneClick : function(target_url){
        try{
            // 現在の選択情報をエレメントにセット
            this.fncSetListObj() ;
            
            // パラメータハッシュ生成
            var initparam = {};
        
            // アニメーション元エレメントIDの設定（指定しなくてもよい）
            initparam["base_id"] = "pro_index_list_body" ;
            
            // データパラメータの設定
            var project_id = this.fncSelectedProjectIdGet() ;
            initparam["dataparam"] = {};
            initparam["dataparam"]["id"]          = Ext.get('base_id').dom.value ;
            initparam["dataparam"]["project_id"]  = project_id ;
            initparam["dataparam"]["base_id"]     = "";
            initparam["dataparam"]["class_word1"] = Ext.get('class_word1').dom.value ;
            initparam["dataparam"]["class_word2"] = Ext.get('class_word2').dom.value ;
            initparam["dataparam"]["class_word3"] = Ext.get('class_word3').dom.value ;

            // コールバックの設定（指定しなくてもよい）
	        initparam["on_save"]    = [this.onMilestoneSave_callback.createDelegate(this)];
	        initparam["on_destroy"] = [this.onMilestoneDestroy_callback.createDelegate(this)];
	        initparam["on_close"]   = [this.onMilestoneClose_callback.createDelegate(this)];

            // タスク追加ダイアログ表示
            this.dialogs.MilestoneDlgIndex.fncShowDialog(initparam) ;

/*        
            // コールバックの設定（指定しなくてもよい）
            initparam["callback"] = $H( { on_save : [this.onMilestoneSave_callback.createDelegate(this)],
                                          on_destroy : [this.onMilestoneDestroy_callback.createDelegate(this)],
                                          on_close : [this.onMilestoneClose_callback.createDelegate(this)] } ) ;
    
            // タスク追加ダイアログ表示
            dlgMilEdit.fncShowDialog(initparam) ;
*/
        }
        catch(e){
        }
    },
		
    /*========================================================
     * 関数名：onMilestoneSave_callback
     * 概　要：マイルストーン保存完了イベント
     *         リストのリロードを実施する。
     * 引　数：なし
     * 戻り値：なし
     ========================================================*/
    onMilestoneSave_callback : function(){
        // プロジェクトリストをリロード
        this.fncListLoad() ;
    },		
		
    /*========================================================
     * 関数名：onMilestoneDestroy_callback
     * 概　要：マイルストーン削除完了イベント
     *         リストのリロードを実施する。
     * 引　数：なし
     * 戻り値：なし
     ========================================================*/
    onMilestoneDestroy_callback : function(){
        // プロジェクトリストをリロード
        this.fncListLoad() ;
    },

    /*========================================================
     * 関数名：onMilestoneClose_callback
     * 概　要：マイルストーンダイアログクローズイベント
     *         ダイアログを閉じた場合の後処理を実施する。
     * 引　数：なし
     * 戻り値：なし
     ========================================================*/
    onMilestoneClose_callback : function(){
    },

    /*========================================================
     * 関数名：onNewEventClick
     * 概　要：イベント追加リンククリックイベント
     *         イベント追加ダイアログを表示する。
     * 引　数：なし
     * 戻り値：なし
     ========================================================*/
    onNewEventClick : function(target_url){
        try{
            // 現在の選択情報をエレメントにセット
            this.fncSetListObj() ;
            
            // パラメータハッシュ生成
            var initparam = {};
        
            // アニメーション元エレメントIDの設定（指定しなくてもよい）
            initparam["base_id"] = "pro_index_list_body" ;
            
            // データパラメータの設定
            var project_id = this.fncSelectedProjectIdGet() ;
            initparam["dataparam"] = {};
            initparam["dataparam"]["id"]          = "";
            initparam["dataparam"]["project_id"]  = project_id ;
            initparam["dataparam"]["base_id"]     = Ext.get('base_id').dom.value ;
            initparam["dataparam"]["class_word1"] = Ext.get('class_word1').dom.value ;
            initparam["dataparam"]["class_word2"] = Ext.get('class_word2').dom.value ;
            initparam["dataparam"]["class_word3"] = Ext.get('class_word3').dom.value ;

            // コールバックの設定（指定しなくてもよい）
	        initparam["on_save"]  = [this.onEventSave_callback.createDelegate(this)];
	        initparam["on_close"] = [this.onEventClose_callback.createDelegate(this)];
    
            // タスク追加ダイアログ表示
            this.dialogs.EventDlgIndex.fncShowDialog(initparam) ;

/*        
            // コールバックの設定（指定しなくてもよい）
            initparam["callback"] = $H( { on_save : [this.onEventSave_callback.createDelegate(this)],
                                          on_close : [this.onEventClose_callback.createDelegate(this)] } ) ;
    
            // タスク追加ダイアログ表示
            dlgEvtEdit.fncShowDialog(initparam) ;
*/
        }
        catch(e){
        }

    },
		
    /*========================================================
     * 関数名：onEditEventClick
     * 概　要：イベント編集リンククリックイベント
     *         イベント編集ダイアログを表示する。
     * 引　数：なし
     * 戻り値：なし
     ========================================================*/
    onEditEventClick :  function(target_url){
        try{
            // 現在の選択情報をエレメントにセット
            this.fncSetListObj() ;
            
            // パラメータハッシュ生成
            var initparam = {};
        
            // アニメーション元エレメントIDの設定（指定しなくてもよい）
            initparam["base_id"] = "pro_index_list_body" ;
            
            // データパラメータの設定
            var project_id = this.fncSelectedProjectIdGet() ;
            initparam["dataparam"] = {};
            initparam["dataparam"]["id"] = Ext.get('base_id').dom.value ;
            initparam["dataparam"]["project_id"] = project_id ;
            initparam["dataparam"]["base_id"] = "";
            initparam["dataparam"]["class_word1"] = Ext.get('class_word1').dom.value ;
            initparam["dataparam"]["class_word2"] = Ext.get('class_word2').dom.value ;
            initparam["dataparam"]["class_word3"] = Ext.get('class_word3').dom.value ;

            // コールバックの設定（指定しなくてもよい）
	        initparam["on_save"] = [this.onEventSave_callback.createDelegate(this)];
	        initparam["on_destroy"] = [this.onEventDestroy_callback.createDelegate(this)];
	        initparam["on_close"] = [this.onEventClose_callback.createDelegate(this)];

            // タスク追加ダイアログ表示
            this.dialogs.EventDlgIndex.fncShowDialog(initparam) ;

/*        
            // コールバックの設定（指定しなくてもよい）
            initparam["callback"] = $H( { on_save : [this.onEventSave_callback.createDelegate(this)],
                                          on_destroy : [this.onEventDestroy_callback.createDelegate(this)],
                                          on_close : [this.onEventClose_callback.createDelegate(this)] } ) ;
    
            // タスク追加ダイアログ表示
            dlgEvtEdit.fncShowDialog(initparam) ;
*/
        }
        catch(e){
        }
    },

    /*========================================================
     * 関数名：onEventSave_callback
     * 概　要：イベント保存完了イベント
     *         リストのリロードを実施する。
     * 引　数：なし
     * 戻り値：なし
     ========================================================*/
    onEventSave_callback :  function(){
        // プロジェクトリストをリロード
        this.fncListLoad() ;
    },

    /*========================================================
     * 関数名：onEventDestroy_callback
     * 概　要：イベント削除完了イベント
     *         リストのリロードを実施する。
     * 引　数：なし
     * 戻り値：なし
     ========================================================*/
    onEventDestroy_callback : function(){
        // プロジェクトリストをリロード
        this.fncListLoad() ;
    },
		
    /*========================================================
     * 関数名：onEventClose_callback
     * 概　要：イベントダイアログクローズイベント
     *         ダイアログを閉じた場合の後処理を実施する。
     * 引　数：なし
     * 戻り値：なし
     ========================================================*/
    onEventClose_callback : function(){
    },		
		
    /*========================================================
     * 関数名：fncSelectedProjectIdGet
     * 概　要：プロジェクト選択プルダウンでの
     *         現在選択されているプロジェクトのIDを取得する
     * 引　数：なし
     * 戻り値：string       プロジェクトID
     ========================================================*/
    fncSelectedProjectIdGet : function(){
        return Ext.get('remote_project_id').dom.value ;
    },		

    /*========================================================
     * 関数名：fncSetListObj
     * 概　要：選択中のリスト情報から、必要な情報を該当エレメントにセットする
     * 引　数：なし
     * 戻り値：なし
     ========================================================*/
    fncSetListObj : function(){
        var index = App.listGanttGrid.fncGetAttribute('selectedIndex');
        
        var elm ;
        if( index != null || index < 0 ){
            var id = App.listGanttGrid.fncGetRowAttribute(index, 'id');
            var class_word1 = App.listGanttGrid.fncGetRowAttribute(index, 'class_word1');
            var class_word2 = App.listGanttGrid.fncGetRowAttribute(index, 'class_word2');
            var class_word3 = App.listGanttGrid.fncGetRowAttribute(index, 'class_word3');
    
            elm = Ext.get('base_id') ;
            elm.dom.value = id==null ? "" : id ;
            elm = Ext.get('class_word1') ;
            elm.dom.value = class_word1==null ? "" : class_word1 ;
            elm = Ext.get('class_word2') ;
            elm.dom.value = class_word2==null ? "" : class_word2 ;
            elm = Ext.get('class_word3') ;
            elm.dom.value = class_word3==null ? "" : class_word3 ;
        }
        else{
            elm = Ext.get('base_id') ;
            elm.dom.value = "";
            elm = Ext.get('class_word1') ;
            elm.dom.value = "";
            elm = Ext.get('class_word2') ;
            elm.dom.value = "";
            elm = Ext.get('class_word3') ;
            elm.dom.value = "";
        }
    }

}

};

// App.Pageを継承
Ext.extend(App.ProjectListGantt, App.Page, _list_gantt);

//=============================
// 現在のページオブジェクトとして生成
//=============================
App.Page.thispage = new App.ProjectListGantt() ;